<?php namespace sacvoyage\storage;

require_once 'sacvoyage/Object.php';
use sacvoyage\Object;
use sacvoyage\exception\InputException;
use sacvoyage\exception\InternalException;

function json_typeof($value) {
	if      (is_string($value)) {
		return 'string';
	} elseif(is_numeric($value)) {
		return 'number';
	} elseif(is_object($value)) {
		return 'object';
	} elseif(is_enumerative_array($value)) {
		return 'array';
	} elseif(is_bool($value)) {
		return 'boolen';
	} elseif(is_null($value)) {
		return 'null';
	} else {
		throw new Exception(gettype($value).' is wrong json type');
	}
}

function json_cast_type($value, $type) {
	switch($type) {
		case 'string':  return (string)$value;  break;
		case 'number':  return (float)$value;   break;
		case 'object':  return array();         break;
		case 'array':   return new Object();    break;
		case 'boolean': 
			return strtoupper($value)=='TRUE' ? true : false; 
			break;
		case 'null':    return null;            break;
		default:
			debug_print_backtrace(); 		
			throw new InternalException("$type is wrong json-type");
	};
}

function json_to_string($value) {//TODO: bad name(
	if      (is_string($value)) {
		return (string)$value;
	} elseif(is_numeric($value)) {
		return (float)$value;
	} elseif(is_object($value)) {
		return new Object();
	} elseif(is_enumerative_array($value)) {
		return array();
	} elseif(is_bool($value)) {
		return $value ? 'true' : 'false';
	} elseif(is_null($value)) {
		return 'null';
	} else {
		throw new InputException(gettype($value).' is wrong json type');
	}
}

?>
